/*
 * @(#)Group.java	1.12 01/12/12
 *
 * Sun Microsystems, Inc.版权所有版权所有。 sun专有/机密。使用受许可条款的约束。
 */

package java.security.acl;

import java.util.Enumeration;
import java.security.Principal;

/**
 * 此接口用于表示一组主体。(委托人代表一个实体，如个人用户或公司)。
 *
 * 注意，Group扩展了Principal。因此，可以将Principal或Group作为参数传递给包含Principal参数的方法。
 * 例如，您可以通过调用对象的<code>addMember</code>方法向Group对象添加主体或组，并将主体或组传递给它。
 *
 * @author 	Satish Dharmaraj
 */
public interface Group extends Principal {

    /**
     * Adds the specified member to the group. 
     *  
     * @param user the principal to add to this group.
     * 
     * @return 如果成员成功添加，则为True;如果主体已经是成员，则为False。
     */
    public boolean addMember(Principal user);

    /**
     * Removes the specified member from the group.
     * 
     * @param user the principal to remove from this group.
     * 
     * @return 如果主体被删除，则为True;如果主体不是成员，则为false。
     */
    public boolean removeMember(Principal user);

    /**
     * 如果传递的主体是组的成员，则返回true。此方法执行递归搜索，因此如果主体属于该组的成员组，则返回true。
     * 
     * @param member the principal whose membership is to be checked.
     * 
     * @return true if the principal is a member of this group, 
     * false otherwise.
     */
    public boolean isMember(Principal member);


    /**
     * 返回组中成员的枚举。返回的对象可以是Principal或Group(它是Principal的子类)的实例。
     * 
     * @return an enumeration of the group members.
     */
    public Enumeration members();

}
